"""
面试题：
    1.selenium中常用的等待有哪些？
    2. 显式等待与隐式等待的区别？
    3.元素定位不到，你是怎么解决的 答案：忘记添加等待
    隐式等待：
        implicitly_wait  读音：a m po lei city  维 特
        针对的是页面的元素，而不是程序
        作用范围： 页面内的所有元素
        异常： 报找不到此元素的异常
        效率： 需要页面加载完之后，才能去定位元素，所以效率不高
    显式等待：
        作用范围： 页面中的单个元素
        异常：   找不到，就报超时异常
        效率：   只要定位这个元素出来，就可以直接进行定位，效率比隐式高，工作中常常使用

    强制等待：
        不针对页面元素，只是让程序休眠
        使用场景： 接口
        如果我们使用了显式等待或者隐式等待，但是数据还是不对，也不报错，此时可以考虑使用强制等待

        time.sleep(等待时间)
"""
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# 创建浏览器驱动对象
driver = webdriver.Edge()
# driver.implicitly_wait(5)   #隐式等待
# 打开页面
driver.get("http://localhost:8081/regA.html")
# 定位账户
# ele=driver.find_element(By.CSS_SELECTOR,"body > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > input:nth-child(2)")
# ele.send_keys("admin")


element=(WebDriverWait(driver,5,0.5).
 until(lambda x:x.find_element(By.CSS_SELECTOR,"body > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > input:nth-child(2)")))
element.send_keys("admin")


def find_ele(value):
    return WebDriverWait(driver, 5, 0.5).until(lambda x: x.find_element(By.CSS_SELECTOR,value))


# ele=find_ele("body > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > input:nth-child(2)")
#显式等待
# (WebDriverWait(driver,5,0.5).
#  until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,"body > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > input:nth-child(2)"))))

# WebDriverWait(driver,5,0.5).
#  until(lambda引导的定位元素 )







time.sleep(10)

driver.quit()

